home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / COMMUNIC / TERMINAL / 1589.ZIP / TERMINIT.C < prev    next >
Text File  |  1989-04-13  |  8KB  |  228 lines

  1. /*  TempINIT.c - Initialization portion of application */
  2.  
  3. #include "windows.h"
  4. #include "icu_user.h"
  5. #include "term.h"
  6.  
  7. int FAR TermInit( hInstance, hPrevInstance, lpszCmdLine, cmdShow )
  8. HANDLE hInstance, hPrevInstance;
  9. LPSTR  lpszCmdLine;
  10. int    cmdShow;
  11. {
  12. int     i;
  13. long    l;
  14. char   ch;
  15. HANDLE hSysMenu;
  16.  
  17. if ( hPrevInstance == 0 ) { /* No other terminal is running */
  18.    if ( TermInitInstance(hInstance) == FALSE )
  19.        return( FALSE );
  20.    }
  21. else {   /* Copy global instance variables from previous instance */
  22.    GetInstanceData(hPrevInstance, (PSTR)szAppName, 10);
  23.    GetInstanceData(hPrevInstance, (PSTR)&hbrWhite,   sizeof(hbrWhite));
  24.    GetInstanceData(hPrevInstance, (PSTR)&hAccelTable,sizeof(hAccelTable));
  25.    }
  26.  
  27. unlink( "bug" );
  28.  
  29. /****************************************/
  30. /* Allocate memory for the display      */
  31. /****************************************/
  32. for ( i = 0, ch = ' ', no_lines = 24, no_cols = 80; i < no_lines+2; i++ ) {
  33.    display[i].Handle = LocalAlloc(LMEM_MOVEABLE, no_cols+4 );
  34.    display[i].string = LocalLock( display[i].Handle );
  35.    if ( display[i].Handle == NULL || display[i].string == NULL ) {
  36.        fileput("Unable to %s memory for display.",
  37.                   (display[i].Handle==NULL?"allocate":"lock"));
  38.        return( FALSE );
  39.        }
  40.    if ( i >= no_lines ) ch = 'X' ;               /* Signals error lines     */
  41.    memset( display[i].string, ch, no_cols );     /* Fill memory with spaces */
  42.    memset( display[i].string+no_cols, '\0', 2 ); /* Terminate line          */
  43.    }
  44.  
  45. /*********************************************
  46. * read the winsize file for Height and Width *
  47. *********************************************/
  48. win_sz.size.left   = width  = CW_USEDEFAULT;
  49. win_sz.size.right  = height = 0;
  50. LoadString( hInstance, IDSWINDOWNAME, (PSTR) win_sz.app_name, 30 );
  51. ret = ReadWindowSize(&win_sz);
  52. if (!ret) {                           /* old cord. were found    */
  53.    width  = win_sz.size.right  - win_sz.size.left;
  54.    height = win_sz.size.bottom - win_sz.size.top;
  55.    if (win_sz.icon)                   /* window should be iconic */
  56.       cmdShow = SW_SHOWMINIMIZED;
  57.    }
  58.  
  59. /* Create a window instance of class "Terminal" */
  60. LoadString(hInstance, IDSMAINTITLE, (LPSTR)buff, 100);
  61.  
  62. hWndTerm = CreateWindow(
  63.      (LPSTR)szAppName, /* window class name                               */
  64.      (LPSTR)buff,      /* name appearing in window caption                */
  65.      WS_TILEDWINDOW,   /* Style, | WS_HSCROLL | WS_VSCROLL for scrollbar  */
  66.      win_sz.size.left, /* x position                                      */
  67.      win_sz.size.top,  /* y position                                      */
  68.      width,            /* width                                           */
  69.      height,           /* height                                          */
  70.      (HWND)NULL,       /* parent window                                   */
  71.      (HMENU)NULL,      /* menu, or child window id                        */
  72.      (HANDLE)hInstance,/* handle to window instance                       */
  73.      (LPSTR)NULL       /* params to pass on                               */
  74.      );
  75.  
  76. /****************************************
  77. * modify the system menu                *
  78. ****************************************/
  79. hSysMenu = GetSystemMenu(hWndTerm,FALSE);
  80. ChangeMenu(hSysMenu,0,NULL,NULL,MF_APPEND|MF_SEPARATOR);
  81. ChangeMenu(hSysMenu,0,"Save Window Size",IDMSAVEWINDOW,MF_APPEND|MF_STRING);
  82.  
  83. /* Load the default configuration filename */
  84. LoadString( hInstTerm, IDSCONFIGPATH, (PSTR) ConfigPath, 30 );
  85.  
  86. /* Modify main menu */
  87. hMenuMain = GetMenu( hWndTerm );
  88. EnableMenuItem( hMenuMain, 1, MF_BYPOSITION|MF_DISABLED|MF_GRAYED );
  89. CheckMenuItem( GetSubMenu( hMenuMain, 1 ), IDMOFF, MF_CHECKED );
  90.  
  91. /* Setup the Dialog Procs. */
  92. lpprocTimer        = MakeProcInstance((FARPROC)Timer,        hInstance);
  93. lpprocDescDlg      = MakeProcInstance((FARPROC)DescDlg,      hInstance);
  94. lpprocSelectDlg    = MakeProcInstance((FARPROC)SelectDlg,    hInstance);
  95. lpprocConfigTerm   = MakeProcInstance((FARPROC)ConfigTerm,   hInstance);
  96. lpprocTermAboutDlg = MakeProcInstance((FARPROC)TermAboutDlg, hInstance);
  97.  
  98. /* Make window visible */
  99. ShowWindow(hWndTerm, cmdShow);
  100.  
  101. hWdesc = CreateDialog(hInstance,MAKEINTRESOURCE(DESCBOX),hWndTerm,lpprocDescDlg);
  102. if ( hWdesc == FALSE )            /* Was the Dialog Box created?  */
  103.    return(FALSE);
  104.  
  105. return TRUE;       /* End if terminit(), return TRUE  */
  106. }
  107.  
  108.  
  109. /*****************************************************************************/
  110. /*****************************************************************************/
  111. /* Procedure called when the application is loaded */
  112. int TermInitInstance(hInstance)
  113. HANDLE hInstance;
  114. {
  115. HANDLE    hClass;
  116. PWNDCLASS pTermClass;
  117.  
  118. /* set up default brush */
  119. hbrWhite = GetStockObject(WHITE_BRUSH);
  120.  
  121. /* load Application string from resource */
  122. LoadString(hInstance, IDSAPPNAME, (LPSTR)szAppName, 20);
  123.  
  124. /* Allocate class structure in local heap */
  125. hClass     = LocalAlloc( LMEM_MOVEABLE, sizeof(WNDCLASS));
  126. pTermClass = (PWNDCLASS) LocalLock( hClass );
  127.  
  128. /* Get necessary resources */
  129. pTermClass->hCursor       = LoadCursor( NULL, IDC_ARROW );
  130. pTermClass->hIcon         = LoadIcon(hInstance, (LPSTR)szAppName);
  131. pTermClass->lpszMenuName  = (LPSTR)szAppName;
  132. pTermClass->lpszClassName = (LPSTR)szAppName;
  133. pTermClass->hbrBackground = hbrWhite;
  134. pTermClass->hInstance     = hInstance;
  135. pTermClass->style         = CS_VREDRAW | CS_HREDRAW;
  136.  
  137. /* Register our Window Proc */
  138. pTermClass->lpfnWndProc   = TermWndProc;
  139.  
  140. /* register this new class with WINDOWS */
  141. if (!RegisterClass((LPWNDCLASS)pTermClass))
  142.     return FALSE;   /* Initialization failed */
  143.  
  144. LocalUnlock( hClass );
  145. LocalFree( hClass );
  146.  
  147. hAccelTable = LoadAccelerators(hInstance, (LPSTR)szAppName);
  148.  
  149. return TRUE;    /* Initialization succeeded */
  150. }
  151.  
  152. /*****************************************************************************/
  153. /*****************************************************************************/
  154. int TermOpenComm()
  155. {
  156. char buffer[80];
  157.  
  158. if ( nCID ) {                   /* A Comm port is active, close it */
  159.    CloseComm( nCID );
  160.    LocalUnlock( hCommHandle );
  161.    LocalFree( hCommHandle );
  162.    }
  163.  
  164. nCID = OpenComm((LPSTR) port_name, IN_QUEUE, OUT_QUEUE );
  165. if ( nCID < 1 ) {
  166.    sprintf( buffer,"TermOpenComm(): OpenComm() error, status = %d", nCID );
  167.    pmsg( buffer );
  168.    return( FALSE );
  169.    }
  170.  
  171. /* Get memory for DCB structure and lock it while port is open */
  172. hCommHandle = LocalAlloc( LMEM_MOVEABLE, sizeof( DCB ) );
  173. DCBPtr      = (DCB *) LocalLock( hCommHandle );
  174. if ( DCBPtr == (DCB *) NULL || hCommHandle == NULL ) {
  175.    sprintf( buffer, "TermOpenComm(): Unable to allocate DCB buffer." );
  176.    pmsg( buffer );
  177.    fileput("DCBPtr = %ld, hCommHandle = %d", DCBPtr, hCommHandle );
  178.    CloseComm( nCID );
  179.    nCID = NULL;
  180.    return( FALSE );
  181.    }
  182.  
  183. ret  = GetCommState(nCID, (DCB *) DCBPtr );
  184. if ( ret > 0 ) {
  185.    sprintf( buffer, "TermOpenComm(): GetCommState() = %d", ret );
  186.    pmsg( buffer );
  187.    return( FALSE );
  188.    }
  189.  
  190. DCBPtr->BaudRate     = (WORD) baud_rate;
  191. DCBPtr->ByteSize     = (BYTE) byte_size;
  192. DCBPtr->Parity       = (BYTE) parity;
  193. DCBPtr->StopBits     = (BYTE) stop_bits;
  194. DCBPtr->RlsTimeout   = 0;
  195. DCBPtr->CtsTimeout   = 0;
  196. DCBPtr->DsrTimeout   = 0;
  197. DCBPtr->fBinary      = TRUE;
  198. DCBPtr->fRtsDisable  = FALSE;
  199. DCBPtr->fParity      = FALSE;
  200. DCBPtr->fOutxCtsFlow = FALSE;
  201. DCBPtr->fOutxDsrFlow = FALSE;
  202. DCBPtr->fDtrDisable  = FALSE;
  203. DCBPtr->fOutX        = FALSE;
  204. DCBPtr->fInX         = TRUE ;
  205. DCBPtr->PeChar       = NULL ;
  206. DCBPtr->fNull        = TRUE ;
  207. DCBPtr->fChEvt       = FALSE;
  208. DCBPtr->fDtrflow     = FALSE;
  209. DCBPtr->fRtsflow     = FALSE;
  210. DCBPtr->XonChar      = 0x11;
  211. DCBPtr->XoffChar     = 0x13;
  212. DCBPtr->XonLim       = (WORD) 100 ;
  213. DCBPtr->XoffLim      = (WORD) 100 ;
  214. DCBPtr->PeChar       = NULL;
  215. DCBPtr->EvtChar      = NULL;
  216. DCBPtr->EofChar      =   26;
  217. DCBPtr->TxDelay      =    0;
  218.  
  219. ret = SetCommState( (DCB far *) DCBPtr );
  220. if ( ret ) {
  221.    sprintf( buffer, "TermOpenComm(): SetCommState() status = %d", ret );
  222.    pmsg( buffer );
  223.    return( FALSE );
  224.    }
  225. return( TRUE );
  226. }
  227.  
  228.